package main

import (
	"fmt"
	"math"
	"sort"
)

/*
小Q的父母要出差N天，走之前给小Q留下了M块巧克力。小Q决定每天吃的巧克力数量不少于前一天吃的一半，
但是他又不想在父母回来之前的某一天没有巧克力吃，请问他第一天最多能吃多少块巧克力

输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数，表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。

输出描述:
输出一个数表示小Q第一天最多能吃多少块巧克力。

输入例子1:
3 7

输出例子1:
4
 */

func main() {

	var N,M int
	fmt.Scanf("%d %d", &N, &M)

	if N < 2 {
		fmt.Println(M)
	}
	var temp, sy float64
	res := []int{}
	// 贪心策略 每次取最大的
	for i := math.Ceil(float64(M) / 2); i >= 0; i -- {   // 向上取整
		temp = i
		sy = float64(M)   // 剩余的巧克力
		for j := 0; j < N; j ++ {
			sy -= temp
			temp = math.Ceil(temp / 2)
			if sy < 0 {
				break
			}
		}
		if sy >= 0{
			res = append(res, int(i))
		}
	}
	// fmt.Println(math.Ceil(float64(M) / 2))
	sort.Ints(res)

	fmt.Println(res[len(res) - 1])
	
}
